import { fetchDictMap, fetchCurrencyArray, fetchCountryArray } from '@/api/base/common'

//  全局缓存，用于减少ajax请求
const dictMap = {}
/**
 * 清空数据字典缓存
 */
export function cleanDictMapCache() {
  for (var key in dictMap) {
    delete dictMap[key]
  }
}
/**
 *设置下拉数据。如果数据不在map缓存，则从远程获取数据
 * @param optionsTypeMap 数据格式为Map，key为数据字典类型，value为下拉数据绑定对象
 */
export function setOptionData(optionsTypeMap, callback) {
  if (optionsTypeMap && optionsTypeMap instanceof Map) {
    const dictType = []
    optionsTypeMap.forEach(function(value, key, map) {
      if (dictMap[key]) {
        if (value instanceof Set) {
          for (const item of value.values()) {
            Object.assign(item, dictMap[key])
          }
        } else {
          Object.assign(value, dictMap[key])
        }
      } else {
        dictType.push(key)
      }
    })
    if (dictType.length > 0) {
      fetchDictMap(dictType).then(response => {
        Object.assign(dictMap, response.data)
        optionsTypeMap.forEach(function(value, key, map) {
          if (dictMap[key] && dictType.indexOf(key) > -1) {
            if (value instanceof Set) {
              for (const item of value.values()) {
                Object.assign(item, dictMap[key])
              }
            } else {
              Object.assign(value, dictMap[key])
            }
          }
        })
        if (callback) {
          callback()
        }
      })
    } else if (callback) {
      callback()
    }
  }
}

/**
 *设置货币种类下拉数据
 * @param {} optionObj 数据格式为下拉数据绑定对象
 */
export function setCurrencyOptionData(optionObj, callback) {
  const dictKey = '__BASE_DICT_CURRENCY__'
  if (optionObj) {
    if (dictMap[dictKey]) {
      Object.assign(optionObj, dictMap[dictKey])
      if (callback) {
        callback()
      }
    } else {
      fetchCurrencyArray().then(response => {
        dictMap[dictKey] = response.data
        Object.assign(optionObj, dictMap[dictKey])
        if (callback) {
          callback()
        }
      })
    }
  }
}

/**
 *设置国别地区下拉数据
 * @param {} optionObj 数据格式为下拉数据绑定对象
 */
export function setCountryOptionData(optionObj, callback) {
  const dictKey = '__BASE_DICT_COUNTRY__'
  if (optionObj) {
    if (dictMap[dictKey]) {
      Object.assign(optionObj, dictMap[dictKey])
      if (callback) {
        callback()
      }
    } else {
      fetchCountryArray().then(response => {
        dictMap[dictKey] = response.data
        Object.assign(optionObj, dictMap[dictKey])
        if (callback) {
          callback()
        }
      })
    }
  }
}

/**
 * 数据字典数据格式化
 * @param {*} _this this对象，用于获取下拉数据绑定对象
 * @param {*} columnName 字段名
 * @param {*} cellValue 字段值
 */
export function valueFormate(_this, columnName, cellValue) {
  const optionsName = columnName + 'Options'
  if (_this[optionsName]) {
    for (const d of _this[optionsName]) {
      if (cellValue == d.value) {
        return d.label
      }
    }
  } else {
    console.error(optionsName + ' not in this')
  }
  return cellValue
}
